#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <iostream>
#include <QMainWindow>
#include <QIcon>
#include <QMenu>
#include <QAction>
#include <QMenuBar>
#include <QSettings>
#include <QFileDialog>
#include <QLabel>
#include <QDebug>
using namespace std;
class MainWindow : public QMainWindow
{
    Q_OBJECT
public slots:
    void slotOpen();      // 打开
    void slotClose();     // 关闭
    void slotPlotHist();  // 绘制直方图
    void slotHistEql();   // 直方图均衡
    void slotExpon();     // 幂次变换 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void readRaw(QString *);
    void showImage(uint8_t *, int, int, int, int, QLabel *);
    void calHist(uint8_t *, int, int);
    void histEql(uint8_t *, int, int, uint8_t *);
    void exponTrans(uint8_t *, int, int, uint8_t *, float);
    void clearFig();

    // 这里是一些全局变量
    uint8_t * image;
    int height, width;
    int hist[256];
    uint8_t figHist[400 * 256 * 5];
    int flagSrc = 0; // 用来描述labelSrc状态的标志
    int flagDst = 0;
    int flagExt = 0;
    int flagHist = 0;  // 直方图的状态标志

    // 这里是一些Qt的组件
    QMenuBar * menuBar;
    QMenu * menuFile;
    QAction * actOpen;
    QAction * actClose;
    QAction * actQuit;
    QAction * actOpenDir;
    QAction * actNext;
    QAction * actPrev;

    QAction * actPlotHist;

    QMenu * menuGray;
    QAction * actHistEql;
    QAction * actExpon;

    QLabel * labelSrc;
    QLabel * labelDst;
    QLabel * labelExt;
};
#endif // MAINWINDOW_H
